import tensorflow as tf
from joblib import load
import pandas as pd
import numpy as np
from sklearn.preprocessing import StandardScaler
class Daima5(object):
    
    def __init__(self):
        # 加载已保存的 Keras 模型
        self.loaded_model = tf.keras.models.load_model('data-mining-experiment/daima7/my_model.keras')  
        # 加载保存的 scaler （用于数据归一化相关）
        self.scaler = load('data-mining-experiment/daima7/scaler.joblib')  

    def get_hourly_trend(self):
        """获取模型预测结果
        """
        # 设置步长为 7
        n_steps = 7  
        # 读取 scenic_data.csv 文件数据
        df_pivot = pd.read_csv('./data-mining-experiment/daima7/scenic_data.csv')  
        # 取最后 n_steps 行数据
        x_values = df_pivot.iloc[-n_steps:]  
        # 将 x_values 最后一列（count 列对应位置）置 0
        x_values.iloc[-1, x_values.columns.get_loc('count')] = 0  
        # 获取处理后的数据值
        x_latest = x_values.values  
        # 调整数据形状，适配模型输入
        latest_data = x_latest.reshape(1, n_steps, x_latest.shape[1])  

        # 预测与反归一化
        # 使用加载的模型进行预测
        predicted = self.loaded_model.predict(latest_data)  
        # 对预测结果进行反归一化
        predicted_count = self.scaler.inverse_transform(predicted)  
        # 修正预测结果中小于 0 的值为 0
        predicted_count[predicted_count < 0] = 0  
        # 处理预测结果为整数列表形式
        hourly_trend = predicted_count[0].astype(int).tolist()  
        # 打印每小时趋势预测结果
        print(hourly_trend)  

        
if __name__ == '__main__':
    mwy = Daima5()
    mwy.get_hourly_trend()